/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viweb.storemanager.dao;

import com.viweb.storemanager.entity.BaseEntity;
import com.viweb.storemanager.entity.Category;
import com.viweb.storemanager.entity.Customer;
import com.viweb.storemanager.entity.Employee;
import com.viweb.storemanager.entity.Product;
import com.viweb.storemanager.entity.Rule;
import com.viweb.storemanager.entity.SaleDetail;
import com.viweb.storemanager.entity.SaleInvoice;
import com.viweb.storemanager.entity.ShippingDetail;
import com.viweb.storemanager.entity.ShippingInvoice;
import com.viweb.storemanager.entity.TypeCategory;
import com.viweb.storemanager.entity.TypeCustomer;
import com.viweb.storemanager.entity.Vendor;
import com.viweb.storemanager.entity.WareHouse;
import java.util.ArrayList;

/**
 *
 * @author nhchung
 */
public class Biz {

    DAO dao = new DAO();
    private static Biz instance;

    public Biz() {
    }

    public static Biz getInstance() {
        if (instance == null) {
            instance = new Biz();
        }

        return instance;
    }

    public static int getObjectIndex(BaseEntity item, ArrayList items) {
        if (item == null) {
            return -1;
        }

        int index = -1;
        for (Object i : items) {
            if (((BaseEntity) i).getId() == item.getId()) {
                index = items.indexOf(i);
                break;
            }
        }

        return index;
    }

    /****----------BEGIN SYSTEM-----------------***/
    public boolean login(Employee emp) {
        emp = dao.checkLoginSystem(emp.getUsername(), emp.getPassword());
        return emp != null ? true : false;
    }

    public boolean changePassword(Employee emp, String confirm) {
        return dao.changePasswordSystem(emp.getUsername(), emp.getPassword(), confirm);
    }

    /****----------END SYSTEM-----------------***/
    /****----------BEGIN EMPLOYEEE-----------------***/
    //chèn thêm nhân viên
    public boolean insertEmployee(Employee employee) {
        if (!dao.insertEmployee(employee)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật thông tin nhân viên
    public boolean updateEmployee(Employee employee) {
        if (!dao.updateEmployee(employee)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá nhân viên
    public boolean deleteEmployee(int id) {
        if (!dao.deleteEmployee(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách nhân viên
    public ArrayList<Employee> selectAllEmployee() {
        return dao.selectAllEmployee();
    }

    //lây về một nhân viên theo id
    public Employee selectByIdEmployee(int id) {
        return dao.selectByIdEmployee(id);
    }

    /****----------END EMPLOYEEE-----------------***/
    /****----------BEGIN RULE-----------------***/
    //thêm mới 1 quyền
    public boolean insertRule(Rule rule) {
        if (!dao.insertRule(rule)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một quyền
    public boolean updateRule(Rule rule) {
        if (!dao.updateRule(rule)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một quyền
    public boolean deleteRule(int id) {
        if (!dao.deleteRule(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách quyền
    public ArrayList<Rule> selectAllRule() {
        return dao.selectAllRule();
    }

    //lấy về quyền theo id
    public Rule selectByIdRule(int id) {
        return dao.selectByIdRule(id);
    }

    /****----------END RULE-----------------***/
    /****----------BEGIN WAREHOUSE-----------------***/
    //thêm mới 1 kho
    public boolean insertWareHouse(WareHouse wareHouse) {
        if (!dao.insertWareHouse(wareHouse)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một kho
    public boolean updateWareHouse(WareHouse wareHouse) {
        if (!dao.updateWareHouse(wareHouse)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một kho
    public boolean deleteWareHouse(int id) {
        if (!dao.deleteWareHouse(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách kho
    public ArrayList<WareHouse> selectAllWareHouse() {
        return dao.selectAllWareHouse();
    }

    //lấy về kho theo id
    public WareHouse selectByIdWareHouse(int id) {
        return dao.selectByIdWareHouse(id);
    }

    /****----------END WAREHOUSE-----------------***/
    /****----------BEGIN CUSTOMERS-----------------***/
    //thêm mới 1 khách hàng
    public boolean insertCustomer(Customer customer) {
        if (!dao.insertCustomer(customer)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một khách hàng
    public boolean updateCustomer(Customer customer) {
        if (!dao.updateCustomer(customer)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một khách hàng
    public boolean deleteCustomer(int id) {
        if (!dao.deleteCustomer(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách khách hàng
    public ArrayList<Customer> selectAllCustomer() {
        return dao.selectAllCustomer();
    }

    //lấy về khách hàng theo id
    public Customer selectByIdCustomer(int id) {
        return dao.selectByIdCustomer(id);
    }

    /****----------END CUSTOMERS-----------------***/
    /****----------BEGIN CUSTOMERS-----------------***/
    //thêm mới 1 khách hàng
    public boolean insertTypeCustomer(TypeCustomer typeCustomer) {
        if (!dao.insertTypeCustomer(typeCustomer)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một khách hàng
    public boolean updateTypeCustomer(TypeCustomer typeCustomer) {
        if (!dao.updateTypeCustomer(typeCustomer)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một khách hàng
    public boolean deleteTypeCustomer(int id) {
        if (!dao.deleteTypeCustomer(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách khách hàng
    public ArrayList<TypeCustomer> selectAllTypeCustomer() {
        return dao.selectAllTypeCustomer();
    }

    //lấy về khách hàng theo id
    public Customer selectByIdTypeCustomer(int id) {
        return dao.selectByIdTypeCustomer(id);
    }

    /****----------END CUSTOMERS-----------------***/
    /****----------BEGIN VENDOR-----------------***/
    //thêm mới 1 nhà sản xuất
    public boolean insertVendor(Vendor vendor) {
        if (!dao.insertVendor(vendor)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một nhà sản xuất
    public boolean updateVendor(Vendor vendor) {
        if (!dao.updateVendor(vendor)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một nhà sản xuất
    public boolean deleteVendor(int id) {
        if (!dao.deleteVendor(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách nhà sản xuất
    public ArrayList<Vendor> selectAllVendor() {
        return dao.selectAllVendor();
    }

    //lấy về nhà sản xuất theo id
    public Vendor selectByIdVendor(int id) {
        return dao.selectByIdVendor(id);
    }

    /****----------END VENDOR-----------------***/
    /****----------BEGIN CATEGORY-----------------***/
    //thêm mới 1 loại hàng
    public boolean insertCategory(Category cat) {
        if (!dao.insertCategory(cat)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một loại hàng
    public boolean updateCategory(Category cat) {
        if (!dao.updateCategory(cat)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một loại hàng
    public boolean deleteCategory(int id) {
        if (!dao.deleteCategory(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách loại hàng
    public ArrayList<Category> selectAllCategory() {
        return dao.selectAllCategory();
    }

    //lấy về loại hàng theo id
    public Category selectByIdCategory(int id) {
        return dao.selectByIdCategory(id);
    }

    /****----------END CATEGORY-----------------***/
    /****----------BEGIN TYPE CATEGORY-----------------***/
    //thêm mới 1 loại hàng
    public boolean insertTypeCategory(TypeCategory typeCat) {
        if (!dao.insertTypeCategory(typeCat)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một loại hàng
    public boolean updateTypeCategory(TypeCategory typeCat) {
        if (!dao.updateTypeCategory(typeCat)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một loại hàng
    public boolean deleteTypeCategory(int id) {
        if (!dao.deleteTypeCategory(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách loại hàng
    public ArrayList<TypeCategory> selectAllTypeCategory() {
        return dao.selectAllTypeCategory();
    }

    //lấy về loại hàng theo id
    public TypeCategory selectByIdTypeCategory(int id) {
        return dao.selectByIdTypeCategory(id);
    }

    /****----------END TYPE CATEGORY-----------------***/
    /****----------BEGIN PRODUCT-----------------***/
    //thêm mới 1 mặt hàng
    public boolean insertProduct(Product product) {
        if (!dao.insertProduct(product)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //cập nhật một mặt hàng
    public boolean updateProduct(Product product) {
        if (!dao.updateProduct(product)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //xoá một mặt hàng
    public boolean deleteProduct(int id) {
        if (!dao.deleteProduct(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    //lấy về danh sách mặt hàng
    public ArrayList<Product> selectAllProduct() {
        return dao.selectAllProduct();
    }

    //lấy về mặt hàng theo id
    public Product selectByIdProduct(int id) {
        return dao.selectByIdProduct(id);
    }

    /****----------END PRODUCT-----------------***/
    /****----------BEGIN SHIPPING INVOICE-----------------***/
    public boolean insertShippingInvoice(ShippingInvoice shippingInvoice) {
        if (!dao.insertShippingInvoice(shippingInvoice)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean updateShippingInvoice(ShippingInvoice shippingInvoice) {
        if (!dao.updateShippingInvoice(shippingInvoice)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean deleteShippingInvoice(int id) {
        if (!dao.deleteShippingInvoice(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public ArrayList<ShippingInvoice> selectAllShippingInvoice() {
        return dao.selectAllShippingInvoice();
    }

    public ShippingInvoice selectByIdShippingInvoice(int id) {
        return dao.selectByIdShippingInvoice(id);
    }

    /****----------END SHIPPING INVOICE-----------------***/
    /****----------BEGIN SALE INVOICE-----------------***/
    public boolean insertSaleInvoice(SaleInvoice saleInvoice) {
        if (!dao.insertSaleInvoice(saleInvoice)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean updateSaleInvoice(SaleInvoice saleInvoice) {
        if (!dao.updateSaleInvoice(saleInvoice)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean deleteSaleInvoice(int id) {
        if (!dao.deleteSaleInvoice(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public ArrayList<SaleInvoice> selectAllSaleInvoice() {
        return dao.selectAllSaleInvoice();
    }

    public SaleInvoice selectByIdSaleInvoice(int id) {
        return dao.selectByIdSaleInvoice(id);
    }

    /****----------END SALE INVOICE-----------------***/
    /****----------BEGIN SALE DETAILS-----------------***/
    public boolean insertSaleDetail(SaleDetail saleDetail) {
        if (!dao.insertSaleDetail(saleDetail)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean updateSaleDetail(SaleDetail saleDetail) {
        if (!dao.updateSaleDetail(saleDetail)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean deleteSaleDetail(int id) {
        if (!dao.deleteSaleDetail(id)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public ArrayList<SaleDetail> selectAllSaleDetail() {
        return dao.selectAllSaleDetail();
    }

    public SaleDetail selectByIdSaleDetail(int id) {
        return dao.selectByIdSaleDetail(id);
    }

    /****----------END SALE DETAILS------------------***/
    /****----------BEGIN SHIPPING DETAILS-----------------***/
    public boolean insertShippingDetail(ShippingDetail shippingDetail) {
        if (!dao.insertShippingDetail(shippingDetail)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean updateShippingDetail(ShippingDetail shippingDetail) {
        if (!dao.updateShippingDetail(shippingDetail)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public boolean deleteShippingDetail(int invoice, String product) {
        if (!dao.deleteShippingDetail(invoice, product)) {
            this.setLastError(dao.getError());
            return false;
        }
        return true;
    }

    public ArrayList<ShippingDetail> selectAllShippingDetail() {
        return dao.selectAllShippingDetail();
    }

    public ShippingDetail selectByIdShippingDetail(int id) {
        return dao.selectByIdShippingDetail(id);
    }
    /****----------END SHIPPING DETAILS------------------***/
    private String _lastError = null;

    public String getLastError() {
        return _lastError;
    }

    public void setLastError(String lastError) {
        this._lastError = lastError;
    }
}
